import router, { asyncRoutes } from './router'
import store from './store'
import NProgress from 'nprogress' // 导入进度条插件
import 'nprogress/nprogress.css' // 导入进度条样式
// import nprogress from 'nprogress'
import getPageTitle from '@/utils/get-page-title'

// 白名单数组
const whiteList = ['/login', '404'] // no redirect whitelist

// 前置路由守卫
router.beforeEach(async(to, from, next) => {
  NProgress.start()

  const token = store.getters.token
  if (token) { // 登陆了
    if (!store.getters.name) {
      // 如果存在 token，访问的是其他页面，直接放行
      const menu = await store.dispatch('user/getUserInfoActions')
      const routeArr = []
      menu.forEach(str => {
        const obj = asyncRoutes.find(item => {
          console.log(item)
          return item.path === '/' + str
        })
        if (obj !== undefined) { // 在menu标识数组里找到了这个匹配的规则对象,在加入
          routeArr.push(obj) // 动态规则对象加入到数组里
        }
      })
      router.addRoutes([...routeArr, { path: '*', redirect: '/404', hidden: true }])
      // 存到vuex里面的 -> 给左侧菜单栏生成使用
      store.commit('permission/setRoutes', [...routeArr, { path: '*', redirect: '/404', hidden: true }])

      setTimeout(() => {
        // 解决: 刷新白屏问题
        next({
          path: to.path,
          replace: true
        })
      }, 0)
    }

    if (to.path === '/login') {
      next('/')
    } else {
      next()
    }
  } else {
    if (whiteList.includes(to.path)) {
      next()
    } else {
      next('/login')
    }
  }
})
// 全局 - 后置守卫
router.afterEach(() => {
  NProgress.done() // 顶部进度条 - 效果关系

  // 切换路由页面,动态修改浏览器标题
  document.title = getPageTitle(router.currentRoute.meta.title)
  // console.log(router.currentRoute) // 当前路由页面的路由对象(会变)
})
